/*
 * 描述： <描述>
 * 修改人： rain
 * 修改时间： 2016年8月8日
 * 项目： rainhy-servicelogger
 */
package com.rainhy.servicelogger.builder;

import com.rainhy.servicelogger.context.ServiceLoggerBuilder;
import com.rainhy.servicelogger.logger.ServiceLogDecorate;
import com.rainhy.servicelogger.logger.ServiceLogPersister;
import com.rainhy.servicelogger.logger.ServiceLogQuerier;
import com.rainhy.servicelogger.logger.ServiceLogger;

/**
 * 基础业务日志建造者
 * 
 * @author rain
 * @version [版本号, 2016年8月8日]
 * @see [相关类/方法]
 * @since [产品/模块版本]
 */
public abstract class BaseServiceLoggerBuilder implements ServiceLoggerBuilder {
    
    @Override
    public ServiceLogger build(Class<?> loggerType) {
        // 查看是否支持对应类型的业务日志
        if (!isSupport(loggerType)) {
            return null;
        }
        
        ServiceLogPersister serviceLogPersister = buildServiceLoggerPersister(loggerType);//构建业务日志持久器
        ServiceLogDecorate serviceLogDecorate = buildServiceLoggerDecorate(loggerType);//构建业务日志装饰器
        ServiceLogQuerier serviceLogQuerier = buildServiceLoggerQuerier(loggerType);//构建业务日志查询器
        
        //构建业务日志
        return new ServiceLoggerImpl(serviceLogDecorate, serviceLogQuerier, serviceLogPersister);
    }
    
    /** 构建业务日志装饰器 */
    protected abstract ServiceLogDecorate buildServiceLoggerDecorate(Class<?> loggerType);
    
    /** 构建业务日志持久器 */
    protected abstract ServiceLogPersister buildServiceLoggerPersister(Class<?> loggerType);
    
    /** 构建业务日志查询器 */
    protected abstract ServiceLogQuerier buildServiceLoggerQuerier(Class<?> loggerType);
    
    /** 查看是否支持对应类型的业务日志 */
    protected abstract boolean isSupport(Class<?> loggerType);
}
